home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / cchh01.arc / DOS.H < prev    next >
C/C++ Source or Header  |  1986-03-14  |  6KB  |  260 lines

  1. /**
  2. *
  3. * This header file supplies information needed to interface with the
  4. * particular operating system and C compiler being used.
  5. *
  6. **/
  7.  
  8.  
  9. /**
  10. *
  11. * The following symbols define which processor is being used.
  12. *
  13. *    I8080        Intel 8080
  14. *    I8085        Intel 8085
  15. *    Z80        Zilog Z80
  16. *    I8086        Intel 8086 or 8088
  17. *    M68000        Motorola 68000
  18. *    GA16        General Automation 16-bit mini
  19. *    IBMPC        IBM Personal Computer (also sets I8086)
  20. */
  21.  
  22.  
  23. /**
  24. *
  25. * The following symbols specify which operating system is being used.
  26. *
  27. *    CPM        Any CP/M OS
  28. *    CPM80        CP/M for Intel 8080 or Zilog Z80
  29. *    CPM86        CP/M for Intel 8086
  30. *    CPM68        CP/M for Motorola 68000
  31. *    MSDOS        Microsoft's MSDOS
  32. *
  33. * Note: CPM will be set to 1 for any of the above.
  34. *
  35. *    UNIX        "Standard" UNIX
  36. *    QUNIX        Quantum's QUNIX OS
  37. *    MIBS        General Automation's MIBS OS
  38. *    OASIS        OASIS OS
  39. *    PICK        PICK OS
  40. *
  41. */
  42.  
  43. #if CPM80
  44. #define CPM 1
  45. #endif
  46. #if CPM86
  47. #define CPM 1
  48. #endif
  49. #if CPM68
  50. #define CPM 1
  51. #endif
  52. #if MSDOS
  53. #define CPM 1
  54. #endif
  55.  
  56.  
  57. /**
  58. *
  59. * The following definitions specify the particular C compiler being used.
  60. *
  61. *    LATTICE        Lattice C compiler
  62. *    BDS        BDS C compiler
  63. *    BTL        Bell Labs C compiler or equivalent
  64. *    MANX        MANX Aztec C compiler
  65. *
  66. */
  67. #define LATTICE 1
  68.  
  69.  
  70.  
  71. /**
  72. *
  73. * The following type definitions take care of the particularly nasty
  74. * machine dependency caused by the unspecified handling of sign extension
  75. * in the C language.  When converting "char" to "int" some compilers
  76. * will extend the sign, while others will not.  Both are correct, and
  77. * the unsuspecting programmer is the loser.  For situations where it
  78. * matters, the new type "byte" is equivalent to "unsigned char".
  79. *
  80. */
  81. #if LATTICE
  82. typedef char byte;
  83. #endif
  84.  
  85. #if BDS
  86. #define byte char
  87. #endif
  88.  
  89. #if BTL
  90. typedef unsigned char byte;
  91. #endif
  92.  
  93. #if MANX
  94. #define byte char
  95. #endif
  96.  
  97. /**
  98. *
  99. * Miscellaneous definitions
  100. *
  101. */
  102. #define SECSIZ 128        /* disk sector size */
  103. #if CPM
  104. #define DMA (char *)0x80    /* disk buffer address */
  105. #endif
  106.  
  107. /**
  108. *
  109. * The following structure is a File Control Block.  Operating systems
  110. * with CPM-like characteristics use the FCB to store information about
  111. * a file while it is open.
  112. *
  113. */
  114. struct FCB
  115.     {
  116.     char fcbdrv;        /* drive code */
  117.     char fcbnam[8];        /* file name */
  118.     char fcbext[3];        /* file name extension */
  119. #if MSDOS
  120.     short fcbcb;        /* current block number */
  121.     short fcblrs;        /* logical record size */
  122.     long fcblfs;        /* logical file size */
  123.     short fcbdat;        /* create/change date */
  124.     char fcbsys[10];    /* reserved */
  125.     char fcbcr;        /* current record number */
  126.     long fcbrec;        /* random record number */
  127. #else
  128.     char fcbexn;        /* extent number */
  129.     char fcbs1;        /* reserved */
  130.     char fcbs2;        /* reserved */
  131.     char fcbrc;        /* record count */
  132.     char fcbsys[16];    /* reserved */
  133.     char fcbcr;        /* current record number */
  134.     short fcbrec;        /* random record number */
  135.     char fcbovf;        /* random record overflow */
  136. #endif
  137.     };
  138.  
  139. #define FCBSIZ sizeof(struct FCB)
  140.  
  141. /**
  142. *
  143. * The following symbols define the sizes of file names and node names.
  144. *
  145. */
  146. #if CPM
  147. #if MSDOS
  148. #define FNSIZE 16
  149. #define FMSIZE 64
  150. #else
  151. #define FNSIZE 16    /* maximum file node name size */
  152. #define FMSIZE 16    /* maximum file name size */
  153. #endif
  154. #endif
  155.  
  156. #if UNIX
  157. #define FNSIZE 16    
  158. #define FMSIZE 64
  159. #endif
  160.  
  161.  
  162. /**
  163. *
  164. * The following structures define the 8086 registers that are passed to
  165. * various low-level operating system service functions.
  166. *
  167. */
  168. #if I8086
  169. struct XREG
  170.     {
  171.     short ax,bx,cx,dx,si,di;
  172.     };
  173.  
  174. struct HREG
  175.     {
  176.     byte al,ah,bl,bh,cl,ch,dl,dh;
  177.     };
  178.  
  179. union REGS
  180.     {
  181.     struct XREG x;
  182.     struct HREG h;
  183.     };
  184.  
  185. struct SREGS
  186.     {
  187.     short es,cs,ss,ds;
  188.     };
  189. #endif
  190.  
  191. /**
  192. *
  193. * The following symbols define the code numbers for the various service
  194. * functions.
  195. *
  196. */
  197. #if MSDOS
  198. #define SVC_DATE 0x2a        /* get date */
  199. #define SVC_TIME 0x2c        /* get time */
  200. #endif
  201.  
  202. /**
  203. *
  204. * The following codes are used to open files in various modes.
  205. *
  206. */
  207. #if LATTICE
  208. #define OPENR 0x8000        /* open for reading */
  209. #define OPENW 0x8001        /* open for writing */
  210. #define OPENU 0x8002        /* open for read/write */
  211. #define OPENC 0x8001        /* create and open for writing */
  212. #else 
  213. #define OPENR 0
  214. #define OPENW 1
  215. #define OPENU 2
  216. #endif
  217.  
  218. /**
  219. *
  220. * The following codes are returned by the low-level operating system service
  221. * calls.  They are usually placed into _oserr by the OS interface functions.
  222. *
  223. */
  224. #if MSDOS
  225. #define E_FUNC 1        /* invalid function code */
  226. #define E_FNF 2            /* file not found */
  227. #define E_PNF 3            /* path not found */
  228. #define E_NMH 4             /* no more file handles */
  229. #define E_ACC 5            /* access denied */
  230. #define E_IFH 6            /* invalid file handle */
  231. #define E_MCB 7            /* memory control block problem */
  232. #define E_MEM 8            /* insufficient memory */
  233. #define E_MBA 9            /* invalid memory block address */
  234. #define E_ENV 10        /* invalid environment */
  235. #define E_FMT 11        /* invalid format */
  236. #define E_IAC 12        /* invalid access code */
  237. #define E_DATA 13        /* invalid data */
  238. #define E_DRV 15        /* invalid drive code */
  239. #define E_RMV 16        /* remove denied */
  240. #define E_DEV 17        /* invalid device */
  241. #define E_NMF 18        /* no more files */
  242. #endif
  243. /**
  244. *
  245. * The following structure appears at the beginning (low address) of
  246. * each free memory block.
  247. *
  248. */
  249. struct MELT
  250.     {
  251.     struct MELT *fwd;    /* points to next free block */
  252. #if SPTR
  253.     unsigned size;        /* number of MELTs in this block */
  254. #else
  255.     long size;        /* number of MELTs in this block */
  256. #endif
  257.     };
  258. #define MELTSIZE sizeof(struct MELT)
  259.  
  260.